#include <string>

#include "ArmeDeLoin.h"

using namespace std;


ArmeDeLoin::ArmeDeLoin(std::string nom, int degats)
{
    m_nom=nom;
    m_degats=degats;
}


ArmeDeLoin::~ArmeDeLoin(){}


void ArmeDeLoin::AttaquerDeLoin(int x, int y, TabDeCells* ZoneDynamique, char orientation)
{

    switch(orientation)
    {
        case 'h': y--; break;
        case 'b': y++; break;
        case 'g': x--; break;
        case 'd': x++; break;
    }

    Objet* Fleche = new Objet(x, y, "Fleche");

    if(x != ZoneDynamique->GetLargeur()-1 && x !=0 && y != ZoneDynamique->GetHauteur()-1 && y!=0 && ZoneDynamique->GetAdresseDsCell(x,y)==0)
    {
        Fleche->SetOrientation(orientation);

        Fleche->SetXY(x,y);

        /* On positionne l'objet une cellule devant le personnage.
        On fait ca pour que l'objet retourne dans le tableau de cellules */
        ZoneDynamique->SetAdresseDsCell(x,y,Fleche);

        //on rajoute l'objet dans la liste des objets à déplacer, avec 'distanceDeJet' déplacements avant de disparaitre
        ZoneDynamique->GetListeDObjets()->ajoutEnQueue(Fleche, 5); //6-1 car on pose l'objet une case devant
    }

    else //le déplacement n'est pas valide ou est directement sur un monstre : on detruit l objet et on inflige les degats
    {
        if (ZoneDynamique->GetAdresseDsCell(x,y)!=0)
        {
            ZoneDynamique->GetAdresseDsCell(x,y)->RecevoirDegat(m_degats);
            if (ZoneDynamique->GetAdresseDsCell(x,y)->EstEnVie() == 0)
            {
                ZoneDynamique->DetruireInstance(ZoneDynamique->GetAdresseCellule(x,y));
            }
        }
        delete Fleche;

    }
}

std::string ArmeDeLoin::GetNomArme()
{return m_nom;}

int ArmeDeLoin::GetDegats()
{return m_degats;}
